import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

// 需要登录才能访问的路由
const protectedRoutes = ['/orders', '/profile']

// 需要管理员权限的路由
const adminRoutes = ['/admin']

export function middleware(request: NextRequest) {
  const { pathname } = request.nextUrl
  const authData = request.cookies.get('auth-storage')?.value

  // 添加调试日志
  console.log('Middleware checking auth:', { pathname, hasAuthData: !!authData })

  // 如果没有认证信息
  if (!authData) {
    // 访问需要登录的路由，重定向到登录页
    if (protectedRoutes.some(route => pathname.startsWith(route)) || 
        adminRoutes.some(route => pathname.startsWith(route))) {
      const url = new URL('/login', request.url)
      url.searchParams.set('returnUrl', pathname)
      return NextResponse.redirect(url)
    }
    return NextResponse.next()
  }

  try {
    // 解析存储的认证信息
    const data = JSON.parse(decodeURIComponent(authData))
    const user = data?.state?.user

    // 添加调试日志
    console.log('Parsed auth data:', { user })

    // 如果没有用户信息
    if (!user) {
      throw new Error('No user data')
    }

    // 如果访问管理后台但不是管理员
    if (adminRoutes.some(route => pathname.startsWith(route)) && user.role !== 'admin') {
      return NextResponse.redirect(new URL('/', request.url))
    }

    return NextResponse.next()
  } catch (error) {
    console.error('Auth error:', error)
    // token解析失败，清除认证信息并重定向到登录页
    const response = NextResponse.redirect(new URL('/login', request.url))
    response.cookies.delete('auth-storage')
    return response
  }
}

export const config = {
  matcher: [
    /*
     * 匹配所有需要保护的路由:
     * - /orders
     * - /profile
     * - /admin 及其子路由
     */
    '/orders/:path*',
    '/profile/:path*',
    '/admin/:path*'
  ]
} 